package com.hedl.practice.diyJava.io.study_serialize.test;

import java.io.*;
import java.util.Arrays;

/**
 * 可序列化的Java对象必须实现java.io.Serializable接口，类似Serializable这样的空接口被称为“标记接口”（Marker Interface）；
 * 反序列化时不调用构造方法，可设置serialVersionUID作为版本号（非必需）；
 * Java的序列化机制仅适用于Java，如果需要与其它语言交换数据，必须使用通用的序列化方法，例如JSON。
 */
public class Main {
    public static void main(String[] args) throws IOException {
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        try(ObjectOutputStream output = new ObjectOutputStream(buffer)){
            // 写入int:
            output.writeInt(12345);
            // 写入String:
            output.writeUTF("Hello");
            // 写入Object:
            output.writeObject(Double.valueOf(123.456));
        }
        String s = Arrays.toString(buffer.toByteArray());
        System.out.println(s);

        /**
         * 反序列化
         */
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buffer.toByteArray());
        try(ObjectInputStream input = new ObjectInputStream(byteArrayInputStream)){
            int n = input.readInt();
            String a = input.readUTF();
            Double d = (Double) input.readObject();
            System.out.println("int类型："+n+"\nString类型："+a+"\nDouble类型："+d);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}
